An important operational aspect of a computer or computer system is the need to transfer data to and from the memory of the computer. One method of transferring data is the use of Direct Memory Access (DMA). A DMA controller permits a device to transfer data over a DMA channel to a memory bus and thereby to access the computer's memory essentially without the use of the computer's processor. A significant advantage of DMA is that large amounts of data may be transferred before generating an interrupt to the computer to signal that the task is completed. Because the DMA controller is transferring the data, the processor is therefore free to perform other tasks.
In the relatively common case when several simultaneously active DMA channels are used to transfer data via a single bus, only a single DMA channel can use the bus at any given moment in time. As a result, the DMA hardware corresponding to all other channels is idle. This redundancy of hardware results in increased gate count and cost of system components.
In dealing with competing DMA hardware attempting to access a single bus, previous attempts to solve this problem rely chiefly on using separate DMA engines with separate sets of registers. In addition, theses methods typically provide some bus arbitration logic, which switches the bus between different DMA engines according to some algorithm to provide parallel transfer activity of engines to transfer data through the bus. These approaches do not address the problem of redundant DMA engines and channels as they merely associate an engine with a single DMA channel. Accordingly, since only one DMA engine could use the bus at any given moment, all other DMA engines sit idle. Further, such DMA engines typically require additional logic to handle complexities of DMA transfer, such as changing burst size and data width used in the bus to accommodate byte granularity of a transfer. In addition, arbitration algorithms that are capable of providing parallel transfer of several DMA channels with flexible priorities and adequately small granularity of transfer require relatively complicated logic.
Due to the above considerations, previous methods of processing data over a single bus by simultaneously active DMA channels result in redundant, more complex DMA engines—requiring a significant increase in gate count and cost than that of a single, simple DMA engine.